/*
 * app_shared.h
 *
 *  Created on: 17.01.2012
 *      Author: knz
 */

#ifndef APP_SHARED_H_
#define APP_SHARED_H_

#include "../ex_hpp/zasciiz.h"

#include "logger.h"

#include <string>
#include <csignal>

/**
  * Глобальные константы приложения
  */
extern int   g_iVerboseLevel;    // Уровень журналирования
extern bool  g_bStderrMode;      // true - вывод журнала в поток stderr
extern bool  g_bDaemonMode;      // true - запуск в режиме демона

extern int         g_iPort;      // порт прослушки сокета сервера
extern std::string g_sIpAddress; // ip-адрес прослушки сокета сервера

extern AsciiZ g_zAppName;        // Имя файла приложения (вычисляется при запуске)
extern AsciiZ g_zAppPath;        // Путь к файлу приложения (вычисляется при запуске)

extern sig_atomic_t g_saStopFlag;
extern sig_atomic_t g_saSleepServerFlag;

#define IF_EMERG_LEVEL   if (g_iVerboseLevel >= LOG_EMERG)
#define IF_ALERT_LEVEL   if (g_iVerboseLevel >= LOG_ALERT)
#define IF_CRIT_LEVEL    if (g_iVerboseLevel >= LOG_CRIT)
#define IF_ERR_LEVEL     if (g_iVerboseLevel >= LOG_ERR)
#define IF_WARNING_LEVEL if (g_iVerboseLevel >= LOG_WARNING)
#define IF_NOTICE_LEVEL  if (g_iVerboseLevel >= LOG_NOTICE)
#define IF_INFO_LEVEL    if (g_iVerboseLevel >= LOG_INFO)
#define IF_DEBUG_LEVEL   if (g_iVerboseLevel >= LOG_DEBUG)

enum AppResultCode {ARC_SUCCESS,
                    ARC_INVALID_IP_ADDRESS,
                    ARC_NO_CONNECT,
                    ARC_SERVER_BUSY,
                    ARC_INVALID_SOCKET,
                    ARC_NONBLOCKED_SOCKET_ERROR,
                    ARC_ERRNO                       // Ошибка в errno
                };

#endif /* APP_SHARED_H_ */
